import PIL as pillow
%matplotlib inline
import numpy as np
import matplotlib.image as mpimg
from scipy import ndimage
from PIL import Image
from PIL import ImageFilter
from matplotlib import pyplot as plt
from matplotlib.pyplot import *
import matplotlib.image as mpimg
import os
import cv2
import time
import scipy.fftpack as fp
def fft(imagepath):
## Functions to go from image to frequency-image and back
im2freq = lambda data:fp.rfft(fp.rfft(data, axis=0),axis=1)
freq2im = lambda f:fp.irfft(fp.irfft(f, axis=1),axis=0)
## Read in data file and transform
data = np.array(Image.open(imagepath))
freq = im2freq(data)
back = freq2im(freq)
# Make sure the forward and backward transforms work!
assert(np.allclose(data, back))
## Helper functions to rescale a frequency-image to [0, 255] and save
remmax = lambda x: x/x.max()
remmin = lambda x: x - np.amin(x, axis=(0,1), keepdims=True)
touint8 = lambda x: (remmax(remmin(x))*(256-1e-4)).astype(int)
return(touint8(freq))
def laplacian(path):
me_non_blur_demosaic = cv2.imread(path)
blur = cv2.GaussianBlur(me_non_blur_demosaic,(3,3),0,0, cv2.BORDER_DEFAULT)
laplacian = cv2.Laplacian(blur, ddepth = cv2.CV_16UC3 , ksize = 3, scale = 1,delta = 0, borderType=cv2.BORDER_DEFAULT)
(mean, stddev) = cv2.meanStdDev(laplacian)
laplacian_operator_std_dev = stddev[0]
variance = laplacian_operator_std_dev**2
return(variance)
# Create image objects
img_blurry_me_DEMOSAIC = ("Sample_Me_Blur/deomosaicimage.bmp")
img_not_blurry_me_DEMOSAIC =("Sample_Me-Non-Blur/deomosaicimage.bmp")
img_blurry_DEMOSAIC = ("SampleBlur/deomosaicimage.bmp")
img_not_blurry_DEMOSAIC =("SampleNon-Blur/deomosaicimage.bmp")
img_blurry_RAW = ("SampleBlur/curFrame.bmp")
img_not_blurry_RAW = ("SampleNon-Blur/curFrame.bmp")
img_blurry_me_RAW = ("Sample_Me_Blur/curFrame.bmp")
img_not_blurry_me_RAW = ("Sample_Me-Non-Blur/curFrame.bmp")
os.remove('saint1.tiff')
os.remove('saint2.tiff')
os.remove('saint3.tiff')
os.remove('saint4.tiff')
os.remove('saint5.tiff')
os.remove('saint6.tiff')
os.remove('saint7.tiff')
os.remove('saint8.tiff')
imsave('saint1.tiff',fft(img_blurry_DEMOSAIC))
imsave('saint2.tiff',fft(img_not_blurry_DEMOSAIC))
imsave('saint3.tiff',fft(img_blurry_RAW))
imsave('saint4.tiff',fft(img_not_blurry_RAW))
imsave('saint5.tiff',fft(img_blurry_me_DEMOSAIC))
imsave('saint6.tiff',fft(img_not_blurry_me_DEMOSAIC))
imsave('saint7.tiff',fft(img_blurry_me_RAW))
imsave('saint8.tiff',fft(img_not_blurry_me_RAW))
# Create image objects
blurry_me_DEMOSAIC = mpimg.imread("Sample_Me_Blur/deomosaicimage.bmp")
not_blurry_me_DEMOSAIC = mpimg.imread("Sample_Me-Non-Blur/deomosaicimage.bmp")
blurry_DEMOSAIC = mpimg.imread("SampleBlur/deomosaicimage.bmp")
not_blurry_DEMOSAIC = mpimg.imread("SampleNon-Blur/deomosaicimage.bmp")
blurry_RAW = mpimg.imread("SampleBlur/curFrame.bmp")
not_blurry_RAW = mpimg.imread("SampleNon-Blur/curFrame.bmp")
blurry_me_RAW = mpimg.imread("Sample_Me_Blur/curFrame.bmp")
not_blurry_me_RAW = mpimg.imread("Sample_Me-Non-Blur/curFrame.bmp")
# Display the originals
f, axarr = plt.subplots(1,2, figsize=(24,18))
axarr[0].imshow(blurry_RAW)
axarr[1].imshow(not_blurry_RAW)
f, axarr = plt.subplots(1,2, figsize=(24,18))
axarr[0].imshow(imread('saint3.tiff'))
axarr[1].imshow(imread('saint4.tiff'))
print(" ################################################# RAW_Sharp_Image ########################################")
print(" "+str(laplacian(img_blurry_RAW)) + " " + str(laplacian(img_not_blurry_RAW)))
print(" "+str(float(laplacian('saint3.tiff'))) + " " + str(float(laplacian('saint4.tiff'))))
f, axarr = plt.subplots(1,2, figsize=(24,18))
axarr[0].imshow(blurry_me_RAW)
axarr[1].imshow(not_blurry_me_RAW)
f, axarr = plt.subplots(1,2, figsize=(24,18))
axarr[0].imshow(imread('saint7.tiff'))
axarr[1].imshow(imread('saint8.tiff'))
print(" ################################################# RAW_Sharp_Image ########################################")
print(" "+str(laplacian(img_blurry_me_RAW)) + " " + str(laplacian(img_not_blurry_me_RAW)))
print(" "+str(float(laplacian('saint7.tiff'))) + " " + str(float(laplacian('saint8.tiff'))))
f, axarr = plt.subplots(1,2, figsize=(25,20))
axarr[0].imshow(blurry_DEMOSAIC)
axarr[1].imshow(not_blurry_DEMOSAIC)
f, axarr = plt.subplots(1,2, figsize=(24,18))
axarr[0].imshow(imread('saint1.tiff'))
axarr[1].imshow(imread('saint2.tiff'))
print(" ################################################# DEMOSAIC_test_Image ########################################")
print(" "+str(laplacian(img_blurry_DEMOSAIC)) + " " + str(laplacian(img_not_blurry_DEMOSAIC)))
print(" "+str(float(laplacian('saint1.tiff'))) + " " + str(float(laplacian('saint2.tiff'))))
f, axarr = plt.subplots(1,2, figsize=(25,20))
axarr[0].imshow(blurry_me_DEMOSAIC)
axarr[1].imshow(not_blurry_me_DEMOSAIC)
f, axarr = plt.subplots(1,2, figsize=(24,18))
axarr[0].imshow(imread('saint5.tiff'))
axarr[1].imshow(imread('saint6.tiff'))
print(" ################################################# DEMOSAIC_Sharp_Image ########################################")
print(" "+str(laplacian(img_blurry_me_DEMOSAIC)) + " " + str(laplacian(img_not_blurry_me_DEMOSAIC)))
print(" "+str(float(laplacian('saint5.tiff'))) + " " + str(float(laplacian('saint6.tiff'))))
# Let's find edges
def apply_sobel_filter(input_image):
im = np.asarray(input_image)
im = input_image
sx = ndimage.sobel(im, axis=0, mode='constant')
sy = ndimage.sobel(im, axis=1, mode='constant')
mag = np.hypot(sx, sy) # magnitude
mag *= 255.0 / np.max(mag) # normalize (Q&D)
sob = np.hypot(sx, sy, dtype=np.float32)
return sob
f, axarr = plt.subplots(1,2, figsize=(24,18))
axarr[0].imshow(apply_sobel_filter(blurry_RAW))
axarr[1].imshow(apply_sobel_filter(not_blurry_RAW))
f, axarr = plt.subplots(1,2, figsize=(24,18))
axarr[0].imshow(apply_sobel_filter(blurry_me_RAW))
axarr[1].imshow(apply_sobel_filter(not_blurry_me_RAW))
f, axarr = plt.subplots(1,2, figsize=(25,20))
axarr[0].imshow(apply_sobel_filter(blurry_DEMOSAIC))
axarr[1].imshow(apply_sobel_filter(not_blurry_DEMOSAIC))
f, axarr = plt.subplots(1,2, figsize=(25,20))
axarr[0].imshow(apply_sobel_filter(blurry_me_DEMOSAIC))
axarr[1].imshow(apply_sobel_filter(not_blurry_me_DEMOSAIC))
#font = cv2.FONT_HERSHEY_SIMPLEX
#bottomLeftCornerOfText = (10,100)
#fontScale = 2
#fontColor = (255,0,0)
#lineType = 2
#cv2.putText(me_non_blur_demosaic,str(float(laplacian_operator_std_dev)), bottomLeftCornerOfText, font, fontScale,fontColor,lineType)
#Display the image
#f, axarr = plt.subplots(1,2, figsize=(25,20))
#axarr[0].imshow(mpimg.imread(me_non_blur_demosaic))
#cv2.imshow(apply_sobel_filter(img_blurry_DEMOSAIC))
# Let's find edges
def pply_sobel_filter(input_image):
im = np.asarray(input_image)
im = input_image
sx = ndimage.sobel(im, axis=1, mode='constant')
sy = ndimage.sobel(im, axis=0, mode='constant')
mag = np.hypot(sx, sy) # magnitude
mag *= 255.0 / np.max(mag) # normalize (Q&D)
sob = np.hypot(sx, sy, dtype=np.float32)
return sob
def aapply_sobel_filter(input_image):
import numpy as np
from scipy.signal import convolve2d
from scipy.ndimage import imread
img = np.asarray(input_image)
img = input_image
# Prepare the kernels
a1 = np.matrix([1, 2, 1])
a2 = np.matrix([-1, 0, 1])
Kx = a1.T * a2
Ky = a2.T * a1
# Apply the Sobel operator
Gx = convolve2d(img, Kx, "same", "symm")
Gy = convolve2d(img, Ky, "same", "symm")
G = np.sqrt(Gx**2 + Gy**2)
# or using the absolute values
#G = np.abs(Gx) + np.abs(Gy)
return(G)
f, axarr = plt.subplots(1,2, figsize=(24,18))
axarr[0].imshow(pply_sobel_filter(blurry_RAW))
axarr[1].imshow(pply_sobel_filter(not_blurry_RAW))
f, axarr = plt.subplots(1,2, figsize=(24,18))
axarr[0].imshow(aapply_sobel_filter(blurry_RAW))
axarr[1].imshow(aapply_sobel_filter(not_blurry_RAW))
f, axarr = plt.subplots(1,2, figsize=(24,18))
axarr[0].imshow(pply_sobel_filter(blurry_me_RAW))
axarr[1].imshow(pply_sobel_filter(not_blurry_me_RAW))
f, axarr = plt.subplots(1,2, figsize=(24,18))
axarr[0].imshow(aapply_sobel_filter(blurry_me_RAW))
axarr[1].imshow(aapply_sobel_filter(not_blurry_me_RAW))
f, axarr = plt.subplots(1,2, figsize=(25,20))
axarr[0].imshow(pply_sobel_filter(blurry_DEMOSAIC))
axarr[1].imshow(pply_sobel_filter(not_blurry_DEMOSAIC))
f, axarr = plt.subplots(1,2, figsize=(25,20))
axarr[0].imshow(aapply_sobel_filter(blurry_DEMOSAIC))
axarr[1].imshow(aapply_sobel_filter(not_blurry_DEMOSAIC))
f, axarr = plt.subplots(1,2, figsize=(25,20))
axarr[0].imshow(pply_sobel_filter(blurry_me_DEMOSAIC))
axarr[1].imshow(pply_sobel_filter(not_blurry_me_DEMOSAIC))
f, axarr = plt.subplots(1,2, figsize=(25,20))
axarr[0].imshow(aapply_sobel_filter(blurry_me_DEMOSAIC))
axarr[1].imshow(aapply_sobel_filter(not_blurry_me_DEMOSAIC))
#blurry_ = apply_sobel_filter(blurry_RAW)
hist1 = cv2.calcHist([apply_sobel_filter(blurry_RAW)],[0],None,[256],[0,256])
hist2 = cv2.calcHist([apply_sobel_filter(not_blurry_RAW)],[0],None,[256],[0,256])
hist3 = cv2.calcHist([apply_sobel_filter(blurry_DEMOSAIC)],[0],None,[256],[0,256])
hist4 = cv2.calcHist([apply_sobel_filter(not_blurry_DEMOSAIC)],[0],None,[256],[0,256])
hist5 = cv2.calcHist([apply_sobel_filter(blurry_me_RAW)],[0],None,[256],[0,256])
hist6 = cv2.calcHist([apply_sobel_filter(not_blurry_me_RAW)],[0],None,[256],[0,256])
hist7 = cv2.calcHist([apply_sobel_filter(blurry_me_DEMOSAIC)],[0],None,[256],[0,256])
hist8 = cv2.calcHist([apply_sobel_filter(not_blurry_me_DEMOSAIC)],[0],None,[256],[0,256])